/**
 * @Author wangyl
 * @E-mail wangyl0629@foxmail.com
 **/
package com.wyl.xue.admin.system.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wyl.xue.admin.system.mybatis.entity.SystemUsers;
import com.wyl.xue.admin.system.vo.UserInfoVo;
import com.wyl.xue.admin.system.vo.UserLoginInfo;

import java.util.List;
import java.util.Set;

public interface User {
    /**
     * @Description 用户登录
     * @param userLoginInfo
     * @return java.lang.String
     * @Date 2020/11/13 15:08
     * @Author wangyl
     * @Version V1.0
     */
    String login(UserLoginInfo userLoginInfo);


    /**
     * @Description 用户退出
     * @param
     * @return void
     * @Date 2020/11/13 15:08
     * @Author wangyl
     * @Version V1.0
     */
    void logout();

    /**
     * @Description 添加用户
     * @param userInfoVo
     * @return void
     * @Date 2020/11/13 15:09
     * @Author wangyl
     * @Version V1.0
     */
    void addUser(UserInfoVo userInfoVo);

    /**
     * @Description 通过id删除用户
     * @param userId
     * @return void
     * @Date 2020/11/13 15:09
     * @Author wangyl
     * @Version V1.0
     */
    void deleteUser(long userId);

    /**
     * @Description 更新用户信息
     * @param systemUsers
     * @return void
     * @Date 2020/11/13 15:10
     * @Author wangyl
     * @Version V1.0
     */
    void updateUser(SystemUsers systemUsers);

    /**
     * @Description 获取当前用户信息
     * @param
     * @return com.wyl.xue.admin.system.vo.UserInfoVo
     * @Date 2020/11/13 15:11
     * @Author wangyl
     * @Version V1.0
     */
    UserInfoVo getCurrentUserInfo();

    /**
     * @Description 通过部门id 后去该部门下的用户信息
     * @param departmentId
     * @param page
     * @param size
     * @return com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.wyl.xue.admin.system.mybatis.entity.SystemUsers>
     * @Date 2020/11/16 23:11
     * @Author wangyl
     * @Version V1.0
     */
    Page<SystemUsers> getUserInfoBydepartmentId(long departmentId, int page, int size);

    /**
     * @Description 获取当前用户可访问路由
     * @param
     * @return java.util.Set<java.lang.Long>
     * @Date 2020/11/13 15:14
     * @Author wangyl
     * @Version V1.0
     */
    Set<Long> getCurrentUserAccessRouter();

    /**
     * @Description 设置用户的角色
     * @param userId
     * @param roleIds
     * @return void
     * @Date 2020/11/13 15:15
     * @Author wangyl
     * @Version V1.0
     */
    void setUserRoles(long userId, List<Long> roleIds);

    /**
     * @Description 通过用户名获取用户信息
     * @param name
     * @return com.wyl.xue.admin.system.mybatis.entity.SystemUsers
     * @Date 2020/11/16 23:26
     * @Author wangyl
     * @Version V1.0
     */
    SystemUsers getSystemUsersByName(String name);

    /**
     * @Description 通过用户id获取用户权限
     * @param userId
     * @return java.util.List<java.lang.String>
     * @Date 2020/11/16 23:27
     * @Author wangyl
     * @Version V1.0
     */
    Set<String> getSystemPermissionsByUserId(long userId);

    /**
     * @Description 搜索用户
     * @param userInfoVo
     * @return java.util.List<com.wyl.xue.admin.system.mybatis.entity.SystemDepartment>
     * @Date 2020/11/21 22:30
     * @Author wangyl
     * @Version V1.0
     */
    List<SystemUsers> searchUser(UserInfoVo userInfoVo);

}
